package net.dengzixu.java.homework.period14.homework1;

/**
 * 1.设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。
 * 这个类的构造函数是：Fraction(int a, int b)构造一个a/b的分数。
 * 这个类要提供以下的功能：
 * double toDouble();//将分数转换为double
 * Fraction plus(Fraction r);//将自己的分数和r的分数相加，产生一个新的Fraction的对象。
 * Fraction multiply(Fraction r);//将自己的分数和r的分数相乘，产生一个新的Fraction的对象。
 * void print();//将自己以“分子/分母”的形式输出到标准输出，并带有回车换行。
 * 如果分数是1/1，应该输出1。当分子大于分母时，不需要提出整数部分，即31/30是一个正确的输出，如2/4应该被化简为1/2。
 *
 * @author Deng Zixu <admin@dengzixu.com>
 */
public class Fraction {

    int numerator;
    int denominator;

    /**
     * 分数
     *
     * @param a 分子
     * @param b 分母
     */
    public Fraction(int a, int b) {
        this.numerator = a;
        this.denominator = b;
    }

    /**
     * 转换为 小数
     *
     * @return 转换后小数
     */
    public double toDouble() {
        return (double) numerator / denominator;
    }

    /**
     * 相加
     *
     * @param r 被加分数
     * @return 结果
     */
    public Fraction plus(Fraction r) {
        return new Fraction(r.numerator + this.numerator, r.denominator + this.denominator);
    }

    /**
     * 相乘
     *
     * @param r 被乘分数
     * @return 结果
     */
    public Fraction multiply(Fraction r) {
        return new Fraction(r.numerator * this.numerator, r.denominator * this.denominator);
    }

    public void print() {
        if (1 == this.denominator) {
            System.out.println(this.denominator);
        }

        Fraction temp = reduce(this);

        System.out.printf("%d / %d \n", temp.numerator, temp.denominator);


    }

    private Fraction reduce(Fraction fraction) {
        int newNumerator = 0, newDenominator = 0;


        for (int i = 1; i <= fraction.numerator; i++) {
            newNumerator = fraction.numerator / i;
            newDenominator = fraction.denominator / i;
        }

        return new Fraction(newNumerator, newDenominator);
    }


}
